package ar.unsam.tp.test

import ar.unsam.tp.programa.Jugador
import ar.unsam.tp.programa.Partido
import ar.unsam.tp.tipo.Estandar
import junit.framework.Assert
import org.junit.Before
import org.junit.Test
import ar.unsam.tp.excepciones.JugadorAspiranteException
import ar.unsam.tp.tipo.Aspirante

class TestProponerJugador {
	var Partido partido = new Partido()
	var Jugador osvaldo = new Jugador("osvaldo")
	var String motivo

	@Before
	def void init() {
		osvaldo.setTipoDeInscripcion(new Estandar)
		motivo = "Es viejo"
	}

	@Test
	def void testProponerJugador() {
		partido.admin.managerAspirantes.agregarAspirante(osvaldo)
		Assert::assertTrue(partido.admin.managerAspirantes.aspirantes.contains(osvaldo))
	}
	
	@Test(expected=typeof(JugadorAspiranteException))
	def void testProponerJugadorYaPropuesto() {
		partido.admin.managerAspirantes.agregarAspirante(osvaldo)
		partido.admin.managerAspirantes.agregarAspirante(osvaldo)
	}

	@Test
	def void testAceptarJugador() {
		partido.admin.managerAspirantes.agregarAspirante(osvaldo)
		partido.admin.managerAspirantes.aceptarAspirante(osvaldo)
		Assert::assertTrue(partido.jugadoresCandidatos.contains(osvaldo))
		Assert::assertTrue(osvaldo.tipoDeInscripcion instanceof Estandar)
		Assert::assertFalse(partido.admin.managerAspirantes.aspirantes.contains(osvaldo))
	}

	@Test
	def void testRechazarJugador() {
		partido.admin.managerAspirantes.agregarAspirante(osvaldo)
		partido.admin.managerAspirantes.rechazarAspirante(osvaldo, motivo)
		Assert::assertTrue(partido.admin.managerAspirantes.altasRechazadas.get(osvaldo) != null)
		Assert::assertTrue(osvaldo.tipoDeInscripcion instanceof Aspirante)
	}
	
	@Test(expected=typeof(JugadorAspiranteException))
	def void testAceptarJugadorInexistente() {
		partido.admin.managerAspirantes.rechazarAspirante(osvaldo, motivo)
		Assert::assertTrue(partido.admin.managerAspirantes.altasRechazadas.get(osvaldo) != null)
	}
	
	@Test(expected=typeof(JugadorAspiranteException))
	def void testRechazarJugadorInexistente() {
		partido.admin.managerAspirantes.aceptarAspirante(osvaldo)
		Assert::assertTrue(partido.admin.managerAspirantes.altasRechazadas.get(osvaldo) != null)
	}
}
